Zipに含まれている長すぎる名前のファイル ( [Errno 36] File name too long ) を Lambda ( Python3 )でエラーなく取り扱う
長すぎるファイル名(255byteを超えるファイル名)がZipに含まれている場合、このZipを Lambda で展開して処理しようとすると、ファイルシステムの制限に抵触して File name too long
エラーが発生します。
import requests import zipfile url = 'url of some zip file' res = requests.get(url) with zipfile.ZipFile(io.BytesIO(res.content)) as z: for info in z.infolist(): filepath = z.extract(info, '/tmp/foo/') with open(filepath, 'rb') as body_file: # write anything you want
前述のコードの z.extract
の部分で File name too long
エラーが発生します。
この問題を解決するには次のコードのように extract
せずに、ファイルコンテンツを取り出します。
import requests import zipfile url = 'url of some zip file' res = requests.get(url) with zipfile.ZipFile(io.BytesIO(res.content)) as z: for info in z.infolist(): with z.open(info.filename, 'r') as body_file: # write anything you want